home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / applications / wp / pgpged_e.lha / pgp.ged.E < prev    next >
Encoding:
Text File  |  1994-10-31  |  14.3 KB  |  482 lines

  1.  /*********************************************************************/
  2. /*                                                                   */
  3. /*   PGP for GoldEd 1.0 - Arexx Script                              */
  4. /*                                                                   */
  5. /*                                                                   */
  6. /*              ´GoldED 0.98´ - © Ditmar Eilert                      */
  7. /*                                                                   */
  8. /*           ´rexxreqtools.library´ © Nico François                  */
  9. /*                                                                   */
  10. /*                                                                   */
  11. /*  Author: Lunz O. Wolfgang (Luwo)                                   */
  12. /*         <W.LUNZ@link-ba.cl.sub.de>                                */
  13. /*                                                                   */
  14. /*  Hinweis: ´MERGE´en des PGP.men an das für Textverarbeitung       */
  15. /*           verwendete GoldEd-Menü!                                 */
  16. /*           & diesen Script in das 'REXX:'-Verzeichnis kopieren     */
  17. /*                                                                   */
  18. /*                                                                   */
  19. /*   $VER: PGP-GoldEd-Script V0.91  ©Luwo (29.04.1994)               */
  20. /*                                                                   */
  21. /*********************************************************************/
  22.  
  23.  
  24.  
  25. ADDRESS COMMAND  'STACK 12000'        /* PGP ist ziemlich hungrig :) */
  26.  
  27. lib = 'rexxreqtools.library'
  28. if ~show('l',lib) then call addlib(lib,0,-30,0)
  29.  
  30.  
  31.  
  32. OPTIONS RESULTS                            /* enable return codes    */
  33.  
  34. if (LEFT(ADDRESS(), 6) ~= "GOLDED") then   /* not started by GoldEd ?*/
  35.     ADDRESS 'GOLDED.1'
  36.  
  37. 'LOCK CURRENT'                             /* lock GUI, gain access  */
  38.  OPTIONS FAILAT 6                          /* ignore warnings        */
  39. SIGNAL ON SYNTAX                           /* ensure clean exit      */
  40. SIGNAL ON ERROR                            /* trap errors            */
  41.  
  42.  
  43. USERFILE = 'T:PGP_userIDs.tmp'           /* einige Standard-Variablen*/
  44. UserPath = 'T:Users'
  45. IDstring = '0x'
  46. NL       = '0a'x
  47. CLRSCR   = '0c'x
  48. PGP      = SEARCHPATH()   /* den Pfad aus der PGPPATH-Variablen lesen*/
  49.  
  50.  
  51. 'QUERY DOC VAR DEFAULTFILENAME'         /* wurde die Blockmarkierung */
  52. 'QUERY MARKED VAR BLOCKMARKIERUNG'      /* aktiviert?                */
  53. ORGFILENAME=DEFAULTFILENAME
  54.  
  55. IF BLOCKMARKIERUNG="TRUE" then  ORGFILENAME=DEFAULTFILENAME'.block'
  56.  
  57.  
  58.  
  59. /* --------- Begin der Verzweigungsroutine ------------------------- */
  60.  
  61.  
  62.  
  63. IF ARG(1)="READ_PGP" then READ_PGP()   /* SubProg, je nach Parameter */
  64. IF ARG(1)="WRITE_PGP" then WRITE_PGP()
  65. IF ARG(1)="ENCODE_normal" then ENCODE_normal()
  66. IF ARG(1)="DECODE_normal" then DECODE_normal()
  67. IF ARG(1)="UNTERSCHREIBEN" then UNTERSCHREIBEN()
  68. IF ARG(1)="KEY_aufnehmen" then KEY_aufnehmen()
  69. IF ARG(1)="KEY_ansehen" then KEY_ansehen()
  70. IF ARG(1)="KEY_editieren" then KEY_editieren()
  71. IF ARG(1)="KEY_entfernen" then KEY_entfernen()
  72. IF ARG(1)="KEY_beglaubigen" then KEY_beglaubigen()
  73. IF ARG(1)="KEY_anhaengen" then KEY_anhaengen()
  74. IF ARG(1)="KEY_generieren" then KEY_generieren()
  75.  
  76.  
  77. /* Kein verfügbarer Parameter ! */
  78.  
  79.  
  80. ADDRESS "GOLDED.1" 
  81. 'REQUEST BODY "PGP-Script-Error!" BUTTON "Shit!"'
  82.  REALLYQUIT()
  83.  
  84. /*----------- Ende der Verzweigungsroutine --------------------------*/
  85.  
  86. /*-------------------------------------------------------------------*/
  87. READ_PGP:                     /* PGP analysiert den Text selbständig */
  88.  
  89.      CALL SAVER()
  90.      ADDRESS COMMAND  PGP '+FORCE 'ORGFILENAME' -o'ORGFILENAME
  91.      CALL LOADER()
  92. REALLYQUIT('k')
  93. end
  94. /*-------------------------------------------------------------------*/
  95.  
  96.  
  97.  
  98. /*-------------------------------------------------------------------*/
  99. WRITE_PGP:                   /* Der Text wird für die entsprechenden */
  100.                              /* Empfänger codiert...                 */
  101.       CALL SAVER()
  102.       REQTITEL="Choose a recipient..."
  103.       empfaengerliste = GETEMPFAENGER()
  104.         if empfaengerliste ~= '' then
  105.             do
  106.              ADDRESS COMMAND
  107.              PGP '-esta +FORCE 'ORGFILENAME EMPFAENGERLISTE
  108.              'c:copy >nil: 'ORGFILENAME'.asc 'ORGFILENAME
  109.              'c:delete >nil: 'ORGFILENAME'.asc'
  110.             end
  111.       CALL LOADER()
  112. REALLYQUIT()
  113. end
  114. /*-------------------------------------------------------------------*/
  115.  
  116.  
  117. /*-------------------------------------------------------------------*/
  118. ENCODE_normal:       /* Der Text wird mit einem Mantra verschlüsselt */
  119.  
  120.        CALL SAVER()
  121.         ADDRESS COMMAND
  122.         PGP '-cta ' ORGFILENAME
  123.        'C:copy >nil: 'ORGFILENAME'.asc 'ORGFILENAME
  124.        'c:delete >nil: 'ORGFILENAME'.asc'
  125.        CALL LOADER()   /* 'OPEN AGAIN' */
  126. REALLYQUIT()
  127. end
  128. /*-------------------------------------------------------------------*/
  129.  
  130.  
  131. /*-------------------------------------------------------------------*/
  132. DECODE_normal:       /* Der Text wird mit einem Mantra entschlüsselt */
  133.  
  134.        CALL SAVER()
  135.         ADDRESS COMMAND
  136.        PGP '-d +FORCE 'ORGFILENAME' -o'ORGFILENAME
  137.        CALL LOADER()
  138. REALLYQUIT()
  139. end
  140. /*-------------------------------------------------------------------*/
  141.  
  142. /*-------------------------------------------------------------------*/
  143. UNTERSCHREIBEN:       /* Der Text wird mit der persönlichen Signatur */
  144.                       /* unterschrieben, und ggfs. komprimiert       */
  145.  
  146.           TITXT = 'Add signature...'
  147.           BTTXT = '_Yes|_No'
  148.           BDTXT = 'Would you like the text compressed?'
  149.           call ABFRAGE()
  150.           if ergebnis =0 then
  151.                signcmd=' -sat +clearsig=on '
  152.             else
  153.                signcmd=' -sat +clearsig=off '
  154.  
  155.        CALL SAVER()
  156.            ADDRESS COMMAND
  157.            PGP SIGNCMD ORGFILENAME
  158.           'C:copy >nil: 'ORGFILENAME'.asc 'ORGFILENAME
  159.           'c:delete >nil: 'ORGFILENAME'.asc'
  160.        CALL LOADER()
  161. REALLYQUIT()
  162. end
  163. /*--------------------------------------------------------------------*/
  164.  
  165. /*--------------------------------------------------------------------*/
  166. KEY_aufnehmen:
  167.      CALL SAVER()
  168.      ADDRESS COMMAND
  169.      PGP '-ka '|| ORGFILENAME
  170.      'c:delete >nil: 'USERFILE
  171.      CALL LOADER()
  172. REALLYQUIT('key')
  173. end
  174. /*--------------------------------------------------------------------*/
  175.  
  176. /*--------------------------------------------------------------------*/
  177. KEY_ansehen:
  178.      REQTITEL="Look at which Key?..."
  179.      empfaengerliste = GETEMPFAENGER()
  180.      if empfaengerliste ~= '' then
  181.         do
  182.           ADDRESS COMMAND
  183.           PGP '-kvvc '|| empfaengerliste
  184.           REALLYQUIT('key')
  185.         end
  186. REALLYQUIT()
  187. end
  188. /*--------------------------------------------------------------------*/
  189.  
  190.  
  191. /*--------------------------------------------------------------------*/
  192. KEY_editieren:
  193.      REQTITEL="Edit which Key?..."
  194.      empfaengerliste = GETEMPFAENGER()
  195.      if empfaengerliste ~= '' then
  196.         do
  197.           ADDRESS COMMAND
  198.           PGP '-ke '|| empfaengerliste
  199.           REALLYQUIT('key')
  200.         end
  201. REALLYQUIT()
  202. end
  203. /*--------------------------------------------------------------------*/
  204.  
  205.  
  206. /*--------------------------------------------------------------------*/
  207. KEY_entfernen:
  208.      REQTITEL="Remove which Key?..."
  209.      empfaengerliste = GETEMPFAENGER()
  210.      if empfaengerliste ~= '' then
  211.         do
  212.           ADDRESS 'GOLDED.1'
  213.           TITXT = 'Remove Public-key?'
  214.           BTTXT = '_No|_Yes'
  215.           BDTXT = namensliste
  216.           call ABFRAGE()
  217.           if ergebnis =0 then
  218.             do
  219.                ADDRESS COMMAND
  220.                PGP '-kr ' empfaengerliste
  221.                'c:delete >nil: 'USERFILE' T:users ALL'
  222.                REALLYQUIT('key')
  223.             end
  224.         end
  225. REALLYQUIT()
  226. end
  227. /*--------------------------------------------------------------------*/
  228.  
  229.  
  230. /*--------------------------------------------------------------------*/
  231. KEY_beglaubigen:
  232.    REQTITEL="Authenticate which Key?..."
  233.    empfaengerliste = GETEMPFAENGER()
  234.      if empfaengerliste ~= '' then
  235.         do
  236.           ADDRESS COMMAND
  237.           PGP '-ks '|| empfaengerliste
  238.           REALLYQUIT('key')
  239.         end
  240. REALLYQUIT()
  241. end
  242. /*--------------------------------------------------------------------*/
  243.  
  244.  
  245. /*--------------------------------------------------------------------*/
  246. KEY_anhaengen:
  247.  
  248.    RADIXcmd='INSERT'
  249.    REQTITEL="Insert RADIX-64-Key..."
  250.  
  251.      empfaengerliste = GETEMPFAENGER()
  252.      if empfaengerliste ~= '' then
  253.        do
  254.             do i = 1 to words(empfaengerliste)
  255.              ADDRESS COMMAND
  256.              PGP '-fkxa 'word(empfaengerliste,i) ' >t:PGPextract.tmp'i
  257.             end
  258.  
  259.              ADDRESS 'GOLDED.1'
  260.             'QUERY ABSLINE VAR LIN'
  261.             'QUERY COLUMN VAR COL'
  262.             'REQUEST BODY="Wo wollen Sie den(die)|   RADIX-64 (ASCII)  |PublicKey(s) einfügen?"
  263.              TITLE="   Radix-64 Public-Key insert:"
  264.              BUTTON="_Cursor|Text_ende|_Vergiß es!" VAR ERGEBNIS'
  265.  
  266.             if ERGEBNIS = 2 then RADIXcmd='APPEND'
  267.  
  268.             if ERGEBNIS ~= 0 then
  269.                do i = 1 to words(empfaengerliste)
  270.                   'OPEN 'RADIXcmd' T:PGPextract.tmp'i
  271.                   'SAVE ALL'
  272.                end
  273.  
  274.             GOTO LINE LIN COLUMN COL
  275.             address command 'c:delete >nil: t:PGPextract.tmp#?'
  276.  
  277.        end
  278.  
  279. REALLYQUIT()
  280. end
  281. /*--------------------------------------------------------------------*/
  282.  
  283.  
  284. /*--------------------------------------------------------------------*/
  285. KEY_generieren:
  286.           TITXT = 'Generate a Secret Key?'
  287.           BTTXT = '_No|_Yes'
  288.           BDTXT = ' Would you like to | create a new | Secret Key?'
  289.           call ABFRAGE()
  290.           if ergebnis =0 then
  291.            do
  292.              ADDRESS COMMAND
  293.               PGP '-kg '
  294.               'c:delete >nil: 'USERFILE
  295.              REALLYQUIT('key')
  296.            end
  297. REALLYQUIT()
  298. end
  299.  
  300. /*--------------------------------------------------------------------*/
  301.  
  302.  
  303.  
  304. /* ---------------- Auswahl der Empfaenger--------------------------- */
  305. GETEMPFAENGER:
  306.  
  307. ADDRESS COMMAND
  308. drop empfaengerliste
  309. PGPcmd   = ''
  310. namensliste= ''
  311.  
  312. /* ist der T:user-Path schon da? */
  313.  if ~EXISTS(UserPath) then 'C:makedir ' USERPATH
  314.  
  315. /* sind die UserIds schon extrahiert? */
  316.  if ~EXISTS(USERFILE) then  call MAKEUSERLISTE()
  317.  
  318. call rtfilerequest("T:Users/", , REQTITEL, ,"rtfi_flags=freqf_multiselect rt_pubscrname=GOLDED.1",empfaenger)
  319.  
  320. if empfaenger == 1 then
  321.   do
  322.     do i=1 to empfaenger.count
  323.       call Open('USID',empfaenger.i,"R")
  324.       dummy = readch('USID',8)
  325.       call Close('USID')
  326.  
  327.       if left(dummy,2)="0x" then
  328.         do
  329.           PGPcmd=PGPcmd dummy
  330.       namensliste =namensliste right(empfaenger.i,length(empfaenger.i)-8) '|'
  331.         end
  332.     end
  333.   end
  334.  
  335.   call rtfreefilebuffer()
  336. return PGPcmd
  337. /*--------------------------------------------------------------------*/
  338.  
  339.  
  340. /* Erstellen der aus der pubring.key-datei extrahierten User Ids */
  341. MAKEUSERLISTE:
  342.     ADDRESS COMMAND PGP ' -kv >'USERFILE
  343.        call Open('UFID',USERFILE,'R')
  344.            do until EOF('UFID')=1
  345.               dummy = READLN('UFID')
  346.  
  347.                 if (UPPER(LEFT(dummy,3))="PUB")&(word(dummy,4)~='***') then
  348.  
  349.                   do
  350.                     keyid = right(word(dummy,2),6)
  351.                     namestart= wordindex(dummy,4)
  352.                     nameend= pos('<',dummy)
  353.                      if nameend=0 then nameend=LENGTH(dummy)+2
  354.                     namelength=nameend-namestart-1
  355.                     name=substr(dummy,namestart,namelength)
  356.                     name=compress(name,':;/><')
  357.  
  358.                     call Open('currentUser',UserPath'/'name,'W')
  359.                     call Writech('currentUser',IDSTRING||KEYID)
  360.                     call Close('currentUser')
  361.  
  362.                   end
  363.  
  364.            end
  365.        call Close('UFID')
  366. say Clrscr
  367. return
  368. /*--------------------------------------------------------------------*/
  369.  
  370.  
  371. /* ------------------- diverse Unterprogramme ----------------------- */
  372.  
  373. SAVER:               /* Speichert, je nachdem, ob die Blockmarkierung */
  374.                      /* aktiviert wurde oder nicht, den ganzen Text,  */
  375.                      /* oder nur einen Ausschnitt daraus ab...        */
  376. ADDRESS "GOLDED.1"
  377. if BLOCKMARKIERUNG="FALSE" then
  378.     do
  379.       'SAVE ALL'
  380.     return 0
  381.     end
  382.  
  383. if BLOCKMARKIERUNG="TRUE" then
  384.     do
  385.       SAVE BLOCK NAME ORGFILENAME
  386.     return 0
  387.     end
  388. end
  389.  
  390. /*--------------------------------------------------------------------*/
  391. LOADER:         /* Lädt, je nachdem, ob die Blockmarkierung aktiviert */
  392.                 /* wurde oder nicht, den ganzen Text, oder auch nur   */
  393.                 /* einen Block wieder ein...                          */
  394.  
  395. ADDRESS "GOLDED.1"
  396. if BLOCKMARKIERUNG="FALSE" then
  397.     do
  398.       'OPEN AGAIN'
  399.     return 0
  400.     end
  401.  
  402. if BLOCKMARKIERUNG="TRUE" then
  403.     do
  404.       DELETE BLOCK
  405.       OPEN INSERT NAME ORGFILENAME
  406.       ADDRESS COMMAND 'c:delete >nil: 'ORGFILENAME
  407.     return 0
  408.     end
  409. end
  410.  
  411.  
  412. /*--------------------------------------------------------------------*/
  413. SEARCHPATH:
  414.  
  415. ADDRESS COMMAND
  416. if exists('env:PGPPATH') then
  417.     do
  418.      call Open('binpath','ENV:PGPPATH','R')
  419.      dummy=readln('binpath')
  420.      call Close('binpath')
  421. /*     dummy='PGP="'dummy||'/bin/pgp"'   */
  422.      interpret  dummy
  423.     end
  424.  
  425. else
  426.     do
  427.      ADDRESS "GOLDED.1"
  428.      TITXT = 'PGP-AREXX-INTERNAL-ERROR'
  429.      BTTXT = '_OK'
  430.      BDTXT = "The PGPPATH variable is not set!|      Please declare this variable !    |    Until set 'C:PGP' will be used.   "
  431.      call ABFRAGE()
  432.      return 'c:pgp'
  433.     end
  434.  
  435. ADDRESS COMMAND
  436. return PGP
  437. end
  438.  
  439.  
  440. /*--------------------------------------------------------------------*/
  441. ABFRAGE:                              /* Erstellt einen Requester...  */
  442.  
  443. ADDRESS "GOLDED.1"
  444. 'REQUEST TITLE="'TITXT'" BODY="'BDTXT'" BUTTON="'BTTXT'" VAR ERGEBNIS'
  445. return 0
  446. end
  447.  
  448.  
  449. /*--------------------------------------------------------------------*/
  450. REALLYQUIT:
  451. ADDRESS "GOLDED.1"
  452. arg QUITTER
  453.  
  454. if QUITTER~=''then
  455.     do
  456.       say NL 'Please press "Return" to continue...'
  457.       pull QUITTER
  458.     end
  459. 'NAME 'DEFAULTFILENAME
  460. 'UNLOCK'                                  /* Sehr wichtig: unlock GUI */
  461. EXIT
  462.  
  463. /*--------------------------------------------------------------------*/
  464. ERROR:
  465.       say NL 'An error ('RC') occured in line:'SIGL' of PGP.ged :-('
  466.       say    '-=> [Press return]'
  467.       pull QUITTER
  468.  
  469. ADDRESS "GOLDED.1"
  470. 'NAME 'DEFAULTFILENAME
  471. 'UNLOCK'
  472. EXIT
  473.  
  474.  
  475. /*--------------------------------------------------------------------*/
  476. SYNTAX:
  477.  ADDRESS "GOLDED.1"
  478. SAY "Sorry, Syntax-error line" SIGL ":" ERRORTEXT(RC) ":-("
  479. 'UNLOCK'
  480. /*--------------------------------------------------------------------*/
  481.  
  482.